﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;

namespace KokosSearcher
{
	public class Dictionary
	{
		
	}

	class Rating
	{
		Bitmap _ratingImage;

		private RaitingStarGenerator _ratingStarGenerator;

		public Rating(){
			this._ratingStarGenerator = new RaitingStarGenerator();
		}

		public Image getRatingImage(int p_raitingId)
		{
			if (p_raitingId > 0)
			{
				this._ratingImage = this._ratingStarGenerator.createRatingStarsImage(p_raitingId);
				return this._ratingImage;
			}
			else
			{
				return null;
			}
		}

		public string getRaitingString(int p_raitingId)
		{
			string ret = "";

			switch (p_raitingId)
			{
				case 100:
					ret = "Jedna zielona gwiazdka";
					break;
				case 200:
					ret = "Dwie zielone gwiazdki";
					break;
				case 300:
					ret = "Trzy zielone gwiazdki";
					break;
				case 400:
					ret = "Cztery zielone gwiazdki";
					break;
				case 500:
					ret = "Pięć zielonych gwiazdek";
					break;
				case 110:
					ret = "Czerwona gwiazdka";
					break;
				case 210:
					ret = "Dwie gwiazdki, w tym jedna czerwona";
					break;
				case 310:
					ret = "Trzy gwiazdki, w tym jedna czerwona";
					break;
				case 410:
					ret = "Cztery gwiazdki, w tym jedna czerwona";
					break;
				case 510:
					ret = "Pięć gwiazdek, w tym jedna czerwona";
					break;
				case 1100:
					ret = "Jedna niebieska gwiazdka";
					break;
				case 1200:
					ret = "Dwie niebieskie gwiazdki";
					break;
				case 1300:
					ret = "Trzy niebieskie gwiazdki";
					break;
				case 1400:
					ret = "Cztery niebieskie gwiazdki";
					break;
				case 1500:
					ret = "Pięć niebieskich gwiazdek";
					break;
				case 105:
					ret = "Brak weryfikacji.";
					break;
				default:
					break;
			}

			return ret;
		}
	}

	class RaitingStarGenerator
	{
		System.Reflection.Assembly _assembly = System.Reflection.Assembly.GetExecutingAssembly();
		Bitmap _greenStar, _redStar, _emptyStar;

		private int numerOfStars = 5;

		public int NumberOfStars
		{
			get { return this.numerOfStars; }
			set { this.numerOfStars = value; }
		}

		public RaitingStarGenerator()
		{
			this._emptyStar = new Bitmap(this.getEmptyStarStream());
			this._greenStar = new Bitmap(this.getGreenStarStream());
			this._redStar = new Bitmap(this.getRedStarStream());
		}

		public Bitmap createRatingStarsImage(int p_rating)
		{
			Bitmap ratingImage = this.createEmptyStarsImage(numerOfStars);
			Bitmap currentStar = null;

			using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(ratingImage))
			{
				// set the background color to white
				g.Clear(System.Drawing.Color.White);

				int offset = 0;

				for (int i = 1; i <= numerOfStars; i++)
				{	
					currentStar = this.getCurrentStarForRating(p_rating,i);

					// draw start on the rating image
					g.DrawImage(currentStar, new System.Drawing.Rectangle(offset, 0, currentStar.Width, currentStar.Height));

					offset += currentStar.Width;
				}
			}

			return ratingImage;
		}

		private Bitmap createEmptyStarsImage(int p_numberOfStars)
		{
			return new Bitmap(p_numberOfStars * this._emptyStar.Width, this._emptyStar.Height);
		}

		private Bitmap getCurrentStarForRating(int p_rating, int p_starNumber)
		{
			Bitmap ret = null;

			switch (p_rating)
			{
				case 100:
					// one green star
					ret = (p_starNumber > 1) ? this._emptyStar : this._greenStar;
					break;
				case 200:
					// two green stars
					ret = (p_starNumber > 2) ? this._emptyStar : this._greenStar;
					break;
				case 300:
					// three green stars
					ret = (p_starNumber > 3) ? this._emptyStar : this._greenStar;
					break;
				case 400:
					// four green stars
					ret = (p_starNumber > 4) ? this._emptyStar : this._greenStar;
					break;
				case 500:
					// five green stars
					ret = this._greenStar;
					break;
				case 110:
					// one red star
					ret = (p_starNumber > 1) ? this._emptyStar : this._redStar;
					break;
				case 210:
					// two red stars
					ret = (p_starNumber > 2) ? this._emptyStar : this._redStar;
					break;
				case 310:
					// three red stars
					ret = (p_starNumber > 3) ? this._emptyStar : this._redStar;
					break;
				case 410:
					// four red stars
					ret = (p_starNumber > 4) ? this._emptyStar : this._redStar;
					break;
				case 510:
					// five red stars
					ret = this._redStar;
					break;
				//case 1100:
				//    ret = "Jedna niebieska gwiazdka";
				//    break;
				//case 1200:
				//    ret = "Dwie niebieskie gwiazdki";
				//    break;
				//case 1300:
				//    ret = "Trzy niebieskie gwiazdki";
				//    break;
				//case 1400:
				//    ret = "Cztery niebieskie gwiazdki";
				//    break;
				//case 1500:
				//    ret = "Pięć niebieskich gwiazdek";
				//    break;
				//case 105:
				//    ret = "Brak weryfikacji.";
				//    break;
				default:
					// at this point we don't have a blue star image in our project so everything above 1000 as rating id gets the green stars
					ret = (p_rating > 1000) ? this._greenStar : this._emptyStar;
					break;
			}

			return ret;
		}
		
		private Stream getGreenStarStream()
		{
			return this._assembly.GetManifestResourceStream("KokosSearcher.star_full_small.gif");
		}

		private Stream getRedStarStream()
		{
			return this._assembly.GetManifestResourceStream("KokosSearcher.star_red_small.gif");
		}

		private Stream getEmptyStarStream()
		{
			return this._assembly.GetManifestResourceStream("KokosSearcher.star_empty_small.gif");
		}
	}

	public class StatusAukcji
	{
		private int _status;
		private string _nazwaStatusu = "";
		private bool _trwajaca, _splacana;
		private int statusAukcji;
			
		public int Status
		{
			get { return this._status;}
		}

		public string Nazwa
		{
			get { return this._nazwaStatusu; }
		}

		public bool Trwajaca
		{
			get { return this._trwajaca; }
		}

		public bool Splacana
		{
			get { return this._splacana; }
		}

		public StatusAukcji(int p_statusPozyczki)
		{
			this._trwajaca = false;
			this._splacana = false;

			if (p_statusPozyczki > 0)
			{
				this._status = p_statusPozyczki;
			}
			
			switch (p_statusPozyczki)
			{
				case 100:
					this._nazwaStatusu = "Nowa pożyczka. Trwa aukcja";
					break;
				case 110:
					this._nazwaStatusu = "Aukcja w trakcie tworzenia - szybka pożyczka (brak weryfikacji PB); brak potwierdzenia aukcji kodem SMS lub aukcja oczekuje na weryfikacje przez Partnera";
					break;
				case 500:
					this._nazwaStatusu = "Kwota uzbierana, pieniądze wysłane. Trwa spłata.";
					break;
				case 1100:
					this._nazwaStatusu = "Uzbierano poniżej 50% inwestycji.";
					break;
				case 1200:
					this._nazwaStatusu = "Uzbierano 0% inwestycji.";
					break;
				case 1300:
					this._nazwaStatusu = "Pożyczka spłacona w całości.";
					break;
				case 1400:
					this._nazwaStatusu = "Pożyczka usunięta przez obsługę. Jeżeli były jakieś inwestycje zostały zwrócone do PD.";
					break;
				case 1500:
					this._nazwaStatusu = "Pożyczka usunięta przez użytkownika";
					break;
				default:
					break;
			}

			if (this._status > 0)
			{
				if (this._status == 100 || this._status == 1100 || this._status == 1200)	
				{
					this._trwajaca = true;
				}

				if (this._status == 500)
				{
					this._splacana = true;
				}
			}
		}
	}
}
